* @return int
*/
function userAdjust( $ts, $tz = false ) {
- global $wgUser, $wgLocalTZoffset;
+ global $wgUser, $wgLocaltimezone, $wgLocalTZoffset;
if ( $tz === false ) {
$tz = $wgUser->getOption( 'timecorrection' );
$data = explode( '|', $tz, 3 );
+ if ( $data[0] == 'System' || $tz == '' ) {
+ # Global timezone
+ if ( isset( $wgLocaltimezone ) ) {
+ $data[0] = 'ZoneInfo';
+ $data[2] = $wgLocaltimezone;
+ }
+ # Global offset in minutes.
+ if ( isset( $wgLocalTZoffset ) ) {
+ $data[1] = $wgLocalTZoffset;
+ }
+ }
+
if ( $data[0] == 'ZoneInfo' ) {
wfSuppressWarnings();
$userTZ = timezone_open( $data[2] );
}
$minDiff = 0;
- if ( $data[0] == 'System' || $tz == '' ) {
- # Global offset in minutes.
- if ( isset( $wgLocalTZoffset ) ) {
- $minDiff = $wgLocalTZoffset;
- }
- } elseif ( $data[0] == 'Offset' ) {
+ if ( $data[0] == 'Offset' ) {
$minDiff = intval( $data[1] );
} else {
$data = explode( ':', $tz );
<?php
class TimeAdjustTest extends MediaWikiLangTestCase {
- static $offset;
+ static $offset, $timezone;
public function setUp() {
parent::setUp();
- global $wgLocalTZoffset;
+ global $wgLocalTZoffset, $wgLocaltimezone;
self::$offset = $wgLocalTZoffset;
+ self::$timezone = $wgLocaltimezone;
$this->iniSet( 'precision', 15 );
}
public function tearDown() {
- global $wgLocalTZoffset;
+ global $wgLocalTZoffset, $wgLocaltimezone;
$wgLocalTZoffset = self::$offset;
+ $wgLocaltimezone = self::$timezone;
parent::tearDown();
}
- # Test offset usage for a given language::userAdjust
- function testUserAdjust() {
- global $wgLocalTZoffset, $wgContLang;
+ /**
+ * Test offset usage for a given language::userAdjust
+ * @dataProvider dataUserAdjustWithOffset
+ */
+ function testUserAdjustWithOffset( $inputDate, $offset, $expectedDate ) {
+ global $wgLocalTZoffset, $wgLocaltimezone, $wgContLang;
$wgContLang = $en = Language::factory( 'en' );
+ $wgLocaltimezone = 'DummyTimezoneSoUserAdjustWillUseTzOffset';
+ $wgLocalTZoffset = $offset;
+
+ $this->assertEquals(
+ strval( $expectedDate ),
+ strval( $en->userAdjust( $inputDate, '' ) ),
+ "User adjust {$inputDate} by {$offset} minutes should give {$expectedDate}"
+ );
+ }
+
+ function dataUserAdjustWithOffset() {
# Collection of parameters for Language_t_Offset.
# Format: date to be formatted, localTZoffset value, expected date
- $userAdjust_tests = array(
+ return array(
array( 20061231235959, 0, 20061231235959 ),
array( 20061231235959, 5, 20070101000459 ),
array( 20061231235959, 15, 20070101001459 ),
array( 20061231235959, -30, 20061231232959 ),
array( 20061231235959, -60, 20061231225959 ),
);
+ }
+
+ /**
+ * Test timezone usage for a given language::userAdjust
+ * @dataProvider dataUserAdjustWithTimezone
+ */
+ function testUserAdjustWithTimezone( $inputDate, $timezone, $expectedDate ) {
+ global $wgLocalTZoffset, $wgLocaltimezone;
- foreach ( $userAdjust_tests as $data ) {
- $wgLocalTZoffset = $data[1];
+ $wgContLang = $en = Language::factory( 'en' );
- $this->assertEquals(
- strval( $data[2] ),
- strval( $en->userAdjust( $data[0], '' ) ),
- "User adjust {$data[0]} by {$data[1]} minutes should give {$data[2]}"
- );
- }
+ $wgLocaltimezone = $timezone;
+ $wgLocalTZoffset = 0;
+
+ $this->assertEquals(
+ strval( $expectedDate ),
+ strval( $en->userAdjust( $inputDate, '' ) ),
+ "User adjust {$inputDate} with timezone {$timezone} should give {$expectedDate}"
+ );
+ }
+
+ function dataUserAdjustWithTimezone() {
+ return array(
+ array( 20111028233711, 'Europe/Warsaw', 20111029013711 ),
+ array( 20111108205929, 'Europe/Warsaw', 20111108215929 ),
+ );
}
+
}